package com.lh.java.basic.datatype;

import com.lh.array.exception.EmptyException;
import com.lh.array.exception.FullException;
import com.lh.array.exception.NoElementException;

/**
 ************************************************ 
 ** Module : 面向对象的Array 
 ** Date: 2012-7-31 
 ** Time: 下午03:02:13 Author lh
 ************************************************ 
 */
public class ObjectOrientedArray {
	private long[] arr; // 内部的一个存放数据的地方
	private int nElems;// 总记录数
	
	
	private int searchKeyExistIndex;//查找到的索引下标
	private int arrSize;//数组大小
	
	public ObjectOrientedArray(){
		arr = new long[Constants.ARRAY_DEFAULT_SIZE];
		nElems = Constants.ZERO;
		arrSize = Constants.ARRAY_DEFAULT_SIZE;
		
	}

	public ObjectOrientedArray(int capacity) {		
		arr = new long[capacity];
		nElems =  Constants.ZERO;
		arrSize = capacity;
	}

	/**
	 * 功能描述 增加数据 
	 * @throws FullException 
	 * @Author: lh 2012-7-31 下午03:09:39
	 */
	public void add(long value) throws FullException {
		if(arrSize==nElems){
			throw new FullException();
		}
        arr[nElems++] = value;       
        System.out.println("nElems in add is "+value+" at "+nElems+" index");
	}

	/**
	 * 功能描述  删除数据
	 * @throws NoElementException 
	 * @throws EmptyException 
	 * @Author: lh  2012-7-31 下午03:10:46
	 */
	public void del(long value) throws NoElementException, EmptyException {
		if(Constants.ZERO==nElems){//数组是否为空
			throw new EmptyException();
		}
         boolean isDateExist = this.search(value);
         if(isDateExist){//存在
        	for(int k=searchKeyExistIndex;k<nElems-1;k++){
     			arr[k]=arr[k+1];
     		}
     		nElems--;
         }else {//没有要删除的元素
			//throw new NoElementException();
		}
	}

	/**
	 * 功能描述  查找数据
	 * @Author: lh  2012-7-31 下午03:10:50
	 */
	public boolean search(long value) {
		for (int i = 0; i < nElems; i++) {
            if(arr[i]==value){
               searchKeyExistIndex = i;
			   return true;				 
			}
		}
		return false;
	}

	/**
	 * 功能描述  数据的个数
	 * @Author: lh  2012-7-31 下午03:10:50
	 */
	public int size() {
        return nElems;
	}
	
	/**
	 * 功能描述  展示数据
	 * @Author: lh  2012-7-31 下午03:10:50
	 */
	public void display() {
		if(Constants.ZERO!=nElems){//不这空
			for(int i=0;i<nElems;i++){
				System.out.print(arr[i]+" ");
			}
			System.out.println();
		}		
	}
}
